草庐IT

c++ - Xcode C++::架构 x86_64 的重复符号

全部标签

c++ - SymGetSymFromAddr64 有效,但 SymGetLineFromAddr64 失败,错误代码为 487

我正在学习Windows7中“DbgHelp”提供的StackWalkAPI。我编写了一个使用StackWalk64的异常过滤器。目的是回溯最多50行函数名和行号。“StackWalk64”遍历每个堆栈帧。从堆栈帧中检索到的地址(AddrPC)在“SymGetSymFromAddr64”和“SymGetLineFromAddr64”中分别用于检索符号名称和行号。但是,尽管“SymGetSymFromAddr64”成功运行,“SymGetLineFromAddr64”却失败了。返回的LastError是487。地址如何对前者成功而对后者不成功?我错过了什么吗?有什么帮助吗?LONGWIN

windows - Windows 10 上的 Visual Studio 2010 x64 编译器

我已经安装了VisualStudio2010Express,但我需要x64编译器工具集。我无法在我的Windows10机器上安装带有Windows7.1SDK的编译器工具集,它显示“未安装.NETFramework4”。如何获取VisualStudio2010的x64编译器? 最佳答案 对我来说,它通过以下步骤工作(旧的VisualStudio版本可以通过https://www.visualstudio.com/vs/older-downloads/下载(需要登录))安装MicrosoftVisualStudio2010Expres

windows - 无法从 Microsoft 符号服务器下载 "ntdll.dll"的符号

我正在尝试将我的WindowsPhone8应用程序移植到Windows10。我能够构建我的应用程序。当我尝试在移动模拟器上以Releasex86部署我的应用程序时,它失败并给出以下消息:Symbolsforntdll.dllcouldnotbedownloadedfromMicrosoftSymbolServers.Exceptionstringandcallstacksmaynotworkcorrectly.Makesureyouhavenetworkconnectionandtryagain尽管我试图在Release模式下运行我的应用程序,但我不确定为什么VS-2015会尝试下载这

c++ - 将 Windows 上的 32 位和 64 位 Boost 构建到同一文件夹中

我正在寻找config.jam的简单设置,它将使用MSVC在Windows上为x86和x64构建Boost(1.60或更高版本)。理想情况下使用对b2的单个调用——我知道它应该支持从单个调用生成多个输出。对x86和x64有两个单独的调用是可以的,但不是首选。我想要的另一件事是将两组库输出到相同文件夹中。显然,它们需要有不同的名称,所以我希望将-x64放在x64二进制文件名称中的某个位置。而且它仍然需要自动链接,所以我不能手动重命名它们,它必须是构建系统支持的东西。这部分是必不可少的。我已经readb2提供了一个--buildid参数并且自动链接支持BOOST_LIB_BUILDID定义

python - 子进程,从 STDOUT 读取时重复写入 STDIN (Windows)

我想从python调用外部进程。我正在调用的进程读取输入字符串并给出标记化结果,然后等待另一个输入(如果有帮助,二进制是MeCab标记器)。我需要通过调用此过程来标记数千行字符串。问题是Popen.communicate()工作但在给出STDOUT结果之前等待进程结束。我不想继续关闭和打开新的子流程数千次。(而且我不想发送整个文本,将来很容易超过数万行。)fromsubprocessimportPIPE,PopenwithPopen("mecab-Owakati".split(),stdin=PIPE,stdout=PIPE,stderr=PIPE,close_fds=False,un

windows - 当你有很多 32 位和 64 位操作系统的 PC 时,如何选择 "program files"文件夹?

当你有很多32位和64位操作系统和32位或64位应用程序的PC时,如何选择“程序文件”文件夹?我制作了一个文件来创建firebird数据库的备份,但我需要帮助。有时会有一台64位操作系统和32位firebird或winrar的PC。有时,PC具有64位操作系统和64位应用程序,或者32位操作系统具有32位应用程序。如何让这段代码更好地工作?ECHOOFFsetisc_user=sysdbasetisc_password=masterkeydate/t>>tempo.txttime/t>>tempo.txtmode20,5delos.txt/qwmicosgetosarchitectur

c - x86-64下的快速堆栈切换

在x86-64下切换堆栈的最少代码是多少?我正在尝试在没有getcontext或setjmp+内联汇编的情况下在Windows和Linux下实现纤程。它真的像交换$rsp和$rbp一样简单吗?因为我可以轻松做到。我只是不知道该怎么做。我对我的x86-64知识生疏了。 最佳答案 将RSP更改为指向不同的堆栈必须作为上下文切换的一部分来完成,上下文切换会保存旧线程/纤程中的所有寄存器并从新寄存器加载已保存的架构状态。不仅是RBP,还有所有RAX-RDI和R8-R15,以及RIP(通过jmp或ret)。我认为还有所有其他调用保留的架构状态

windows - 如何确定我的应用程序是在 x86 还是 x64 Windows 上运行?

我想知道,在运行时,我是在32位还是64位Windows上运行。OSVERSIONINFOEX结构告诉我主要版本和次要版本,但我猜我需要内部版本号。有人知道它们是什么吗? 最佳答案 如果您的应用程序是为64位编译的,那么答案很简单:您在64位Windows上运行。如果您的应用程序是为32位编译的,您需要调用IsWow64Process.此功能仅在WindowsXP或更高版本上导出;如果您想支持早期版本的Windows,则需要使用GetProcAddress来获取指向此函数的指针。 关于w

windows - 这是消除警告 C4945(已从另一个程序集导入的符号)的正确方法吗?

我有一个.net解决方案(用C++/CLI编写),它引用了一些.dll项目,如下所示:MainProject->ProjectA->ProbjectBMainProject->ProjectB最初我从MainProject中引用了ProjectA和ProjectB,这给了我上面提到的警告。我可以通过从ProjectMain中删除对ProjectB的引用来删除警告,但这会使MainProject依赖于ProjectB变得不那么明显。这是消除警告的正确做法吗? 最佳答案 笼统地说,一个依赖系统可以用directedgraph来描述。其中

windows - 32 位用户模式驱动程序可以在 64 位操作系统上运行吗?

我一直在查看一些关于64位驱动程序开发的信息;我发现必须重写驱动程序才能与64位操作系统兼容。但是,我想知道这是否也适用于用户模式驱动程序。我问这个的原因是因为我的理解是用户模式驱动程序通过Win32API,所以理论上它们应该能够在WOW32之上运行。这是真的吗?谢谢,海梅 最佳答案 用户模式驱动程序可以是32位或64位,但请注意以下几点:用于打印、扫描和相机的用户模式驱动程序必须是64位。不允许使用旧版API(特定于WindowsNT®4.0)。http://www.microsoft.com/whdc/driver/kernel